Javaアプリケーションをローカル端末のコンテナ上で起動してみた

Javaアプリケーションをローカル端末のコンテナ上で起動してみた

Clock Icon2024.12.29

こんにちはこーへいです!

今回は簡単なサンプルJavaアプリケーションをローカル端末のコンテナ上で起動してみます。

前提

  • Javaのバージョンは以下
java -version                                       
openjdk version "17.0.12" 2024-07-16 LTS
OpenJDK Runtime Environment Corretto-17.0.12.7.1 (build 17.0.12+7-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.12.7.1 (build 17.0.12+7-LTS, mixed mode, sharing)
  • ローカル端末はM2 Mac
  • ビルドツールはMaven

Spring Bootにて「Hello World」アプリの作成

まずWebアプリケーションの作成を容易にするJavaのフレームワークであるSpring Bootを用いて簡単なHello Worldアプリを用意します。

https://tech-lab.sios.jp/archives/19941#Hello_Worldwo_biao_shi

今回は上記記事を参考に用意させていただきました。分かりやすくまとめられているので基本的に手順通り実施いただければと思います。

貼り付けた画像_2024_12_29_18_33

作成後、mainメソッドを実行してJavaアプリケーションを動かします。

貼り付けた画像_2024_12_29_18_36

http://localhost:8081/hello」 でローカル上での起動を確認できました。

貼り付けた画像_2024_12_29_18_37

ちなみに私のローカル端末では8080ポートは別のアプリで使用していたので、Javaアプリでは8081を使用する様に「application.properties」で変更しています。

spring.application.name=demo
server.port=8081

ctrl+cなどでアプリを停止します。

jarファイルの作成

続いてjarファイルを作成します。jarファイルに圧縮することでアプリケーションの配布を容易に出来ます。

https://www.zunouissiki.com/spring-boot-distribute-jar-standalone/

今回はMaven(gradleとよく使用されるJavaのビルドツール)の手順にてjarファイルの作成を行いました。

ブログ上ではVScodeからパッケージ化を行っていますが、./mvnw packageのコマンドでも実行可能です。

java -jar .\example.jar

上記コマンドを実行し、再び「http://localhost:8081/hello」 にアクセスしjar化したアプリケーションでも実行できるか確認します。

確認ができたら再びctrl+cで停止します。

コンテナにて起動

では最後にコンテナ上で起動を確認できるか試してみましょう!

Spring Bootのプロジェクト配下に以下のDockerfileを作成します。

FROM amazoncorretto:17
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

今回は別記事にて今回用意したアプリを元にECS上で検証予定なため、Amazonが用意しているOpenJDKディストリビューションであるCorrettoを使用しました。

ローカルのバージョンに合わせて17にしています。

そのほかの記述は公式サイトに準じています。

https://spring.pleiades.io/guides/gs/spring-boot-docker

# イメージを作成
docker build -t sample/java:v1 .
# コンテナを起動
docker run -p 9999:8081 sample/java:v1

その後Dockerfileからイメージの作成、コンテナの起動を実施します(ちょっと遊び心を加えてローカル端末の9999ポートとコンテナの8081ポートを紐づけています)。

貼り付けた画像_2024_12_29_19_18

まとめ

簡単なJavaアプリケーションをコンテナ上に起動できました。

今後こちらを元にCodeシリーズやECSを使った検証を行うので楽しみにしていてください。

その他参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.